iT邦幫忙

DAY 12
2

強而有力的 Windows PowerShell系列 第 12

Windows PowerShell 應用 - 收集電腦資料

  • 分享至 

  • xImage
  •  

**「Windows PowerShell 基本操作」**一系列的文章分享已經結束了,從本次開始,要說明如何應用 Windows PowerShell 來進行相關的管理。這次就先介紹要怎麼收集電腦的資料。
為了方便讓系統管理者收集電腦的資料,Windows PowerShell 提供一組 cmdlet:Get-WmiObject,來取得 Windows Management Instrumentation(WMI)類別(英文稱 Class)的執行個體或是其相關可用類別的資料。因為 WMI 類別多達幾百個,而某些類別甚至包含數 10 多個屬性,因此 Get-WmiObject[/b] 提供一個可查詢有哪些可用的 WMI 類別清單。

以下面的程式碼而言,會需取得本機電腦上可用的 WMI 類別清單:

Get-WmiObject -List | Out-Host -Paging

以下先舉幾個例子:
桌面設定的資料
以下面的程式碼為例,會收集電腦名稱為 alexc-pc 的桌面設定資料:

Get-WmiObject -Class Win32_Desktop -ComputerName alexc-pc

執行的部分結果類似這樣:

大家可千萬不要被 ComputerName 參數的名子給騙了,這個參數的值不僅可以使用電腦名稱完整網域名稱,也可使用 IP 位址。更可用句號(.)localhost 以及 127.0.0.1 來代表是本機電腦,不過一般來說,在這種情況下,都會直接省略掉 ComputerName 參數跟參數值。原因先前提過:屬性是預設值,就可省略。

要注意的是,於使用 Get-WmiObject 連接遠端電腦時,遠端電腦必須已經備妥 WMI 環境,且可以不用安裝 Windows PowerShell,但您所使用的帳號必須隸屬於遠端電腦的本機系統管理員群組。

我們可以看到,執行的結果有很多資料,這時候就可使用管線運算子(|) 將 Get-WmiObject 執行的結果,傳送給 Select-Object 指令進行篩選,並以頁為輸出單位。例如只要列出以英文字母開頭的屬性,就可在 Property 參數之後值,使用 [a-z]* 來過濾:

Get-WmiObject -Class Win32_Desktop | Select-Object -Property [a-z]* | Out-Host -Paging

處理器資料
以下面的程式碼來說,會顯示本機電腦的處理器資料:

Get-WmiObject -Class Win32_Processor

電腦型號資料
通常我們會想知道目前所安裝的 OS 是 32-bit 還是 64-bit,雖然由上面的程式碼之執行結果中的 AddressWidthDataWidth,也可得知,不過,用下面的程式碼似乎更簡單:

Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property SystemType

執行的結果會像這樣:
SystemType

X86-based PC

SystemType

x64-based PC

事實上,Win32_ComputerSystem 裡面提供的資料很多:

Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property *

作業系統資料
列出基本的作業系統資料:

Get-WmiObject -Class Win32_OperatingSystem

更為詳細的作業系統資料:

Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property *

現在來一點實用的應用。在本機電腦上顯示以 Win 帶頭的服務:

PS C:\> Get-WmiObject -Query "Select * from Win32_Service Where Name Like 'Win%'"


ExitCode  : 0
Name      : WinDefend
ProcessId : 4196
StartMode : Auto
State     : Running
Status    : OK

ExitCode  : 0
Name      : WinHttpAutoProxySvc
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

ExitCode  : 0
Name      : Winmgmt
ProcessId : 992
StartMode : Auto
State     : Running
Status    : OK

ExitCode  : 0
Name      : WinRM
ProcessId : 1108
StartMode : Manual
State     : Running
Status    : OK

現在要停止 WinRM 服務,先用 Get-WmiObject 命令搭配 Filter 參數找出服務名稱為 WinRM 的服務,然後再呼叫 Win32_Service WMI 類別的 StopService 方法(請確認權限足以停止服務!):

(Get-WmiObject Win32_Service -Filter "Name='WinRM'").StopService()

最後,列出其他幾個較為常用的 WMI 類別:
BIOS 資料:Win32_BIOS
已安裝的 Hotfix 資料:Win32_QuickFixEngineering
可用的磁碟空間:Win32_LogicalDisk
登入工作階段資料:Win32_LogonSession
已登入電腦的使用者資料:Win32_ComputerSystem
電腦當地時間:Win32_LocalTime
網路介面卡屬性:Win32_NetworkAdapter
網路介面卡設定:Win32_NetworkAdapterConfiguration


上一篇
Windows PowerShell 基本操作 - 執行 Windows PowerShell 腳本
下一篇
使用 Windows PowerShell 管理處理序
系列文
強而有力的 Windows PowerShell33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言